import request, { resetUserInfoRequest } from '@/utils/request'

// 定义接口类型
interface LoginResponse {
  code: number
  msg: string
  data: {
    token: string
    user_info: {
      id: number
      name: string
      username: string
      avatar: string
      department: string // 新增部门字段
      position: string // 新增职位字段
      menu?: any[] // 菜单可能在user_info中
      [key: string]: any // 支持其他动态字段
    }
    menu?: any[] // 菜单可能在data根级别
  }
}

interface UserInfoData {
  menu: any[]
  admin: {
    id: number
    name: string
    username: string
    avatar: string
    [key: string]: any
  }
  system: { [key: string]: any }
  web: { [key: string]: any }
}

interface UserInfoResponse {
  code: number
  msg: string
  data: UserInfoData
}

/**
 * 用户登录
 * @param data 登录参数
 * @returns 登录结果
 */
export const login = (data: {
  username: string
  password: string
  captcha?: string
  captcha_token?: string
  captchaId?: string
}): Promise<LoginResponse> => {
  // 创建form-data格式的参数
  const formParams = new URLSearchParams()
  formParams.append('username', data.username)
  formParams.append('password', data.password)
  if (data.captcha) {
    formParams.append('captcha', data.captcha)
  }

  // 支持无状态验证码token
  if (data.captcha_token) {
    formParams.append('captcha_token', data.captcha_token)
  }

  // 注意：captchaId 参数已移除，因为后端没有使用此参数进行验证码验证

  return request({
    url: '/api/auth/login',
    method: 'post',
    data: formParams,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  })
}

/**
 * 获取用户信息
 * @returns Promise<UserInfoResponse> 用户信息
 */
export const getUserInfo = async (): Promise<any> => {
  try {
    const res = await request.get('/api/auth/userInfo')

    return res // 返回整个响应对象，而不是res.data
  } catch (error) {
    throw error
  }
}

/**

/**
 * 重置用户信息请求状态
 * 注意：此函数现在通过request.ts中的全局机制实现重置
 */
export const resetUserInfo = (): void => {
  // 直接调用，无需动态导入
  resetUserInfoRequest()
}
